package com.bigstonecontainer.training.springboot.frm.server.sys.service.impl;

import com.bigstonecontainer.training.springboot.frm.server.sys.domain.SysRole;
import com.bigstonecontainer.training.springboot.frm.server.sys.domain.SysRoleMenu;
import com.bigstonecontainer.training.springboot.frm.server.sys.mapper.SysRoleMapper;
import com.bigstonecontainer.training.springboot.frm.server.sys.mapper.SysRoleMenuMapper;
import com.bigstonecontainer.training.springboot.frm.server.sys.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 角色业务接口实现类
 *
 * @author jiaodacailei
 */
@Service
@Transactional
public class SysRoleServiceImpl implements SysRoleService {

    /**
     * 注入SysRoleMapper
     */
    @Autowired
    private SysRoleMapper sysRoleMapper;

    @Autowired
    private SysRoleMenuMapper   roleMenuMapper;


    /**
     * 角色列表查询
     *
     * @return 角色列表
     */
    @Override
    public List<SysRole> getList() {
        return sysRoleMapper.getList();
    }

    /**
     * 获取单个角色信息
     *
     * @param id 角色ID
     * @return 单个角色信息
     */
    @Override
    public SysRole getOne(Long id) {
        return sysRoleMapper.getOne(id);
    }

    /**
     * 创建一个角色
     *
     * @param role 角色
     * @return 插入的记录个数
     */
    @Override
    public int create(SysRole role) {
        return sysRoleMapper.insert(role);
    }

    /**
     * 通过主键查找一个角色，并进行修改
     *
     * @param role 角色
     * @return 修改的记录个数
     */
    @Override
    public int updateById(SysRole role) {

        // 修改角色信息
        sysRoleMapper.updateById(role);
        // 删除角色与菜单关联
        roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
        return insertRoleMenu(role);


    }
    /**
     * 新增角色菜单信息
     *
     * @param role 角色对象
     */
    public int insertRoleMenu(SysRole role)
    {
        int rows = 1;
        // 新增用户与角色管理
        List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
        for (Integer menuId : role.getMenuIds())
        {
            SysRoleMenu rm = new SysRoleMenu();
            rm.setRoleId(role.getRoleId());
            rm.setMenuId(menuId);
            list.add(rm);
        }
        if (list.size() > 0)
        {
            rows = roleMenuMapper.batchRoleMenu(list);
        }
        return rows;
    }
    /**
     * 在数据库中，通过主键查找一个角色，并进行删除
     *
     * @param id 角色ID
     * @return 删除的记录个数
     */
    @Override
    public int deleteById(Long id) {
        return sysRoleMapper.deleteById(id);
    }
}
